#!/usr/bin/env python

from __future__ import print_function

import argparse
import os
import subprocess
import sys

STYLE_COMMAND = ['./utils/pycodestyle.py',
                 '--max-line-length=120']


def check_author_details():
    """Check author name and email settings from
       environment variables populated by git
    """
    name = os.environ.get('GIT_AUTHOR_NAME', '')
    email = os.environ.get('GIT_AUTHOR_EMAIL', '')
    retval = 0
    if len(name) == 0:
        print('Please set your name: git config --global user.name "Joe Scientist"')
        retval = 1
    if len(email) == 0 or not email.endswith('.mpg.de'):
        print('Please set your work email: git config --global user.email "joe.scientist@tuebingen.mpg.de"')
        retval = 1
    return retval


def get_files():
    files = subprocess.check_output(['git', 'status', '--porcelain']).split('\n')
    modified_files = [f[3:] for f in files if f and f[0] in 'AM' and f.endswith('.py')]
    return modified_files


def check_python_style(files):
    if files:
        try:
            subprocess.check_output(STYLE_COMMAND + files)
        except subprocess.CalledProcessError, e:
            print('Python style violations were found:')
            print(e.output)
            return e.returncode
    return 0


def main():
    print('Running pre-commit checks!')
    files = get_files()
    if check_author_details() or check_python_style(files):
        print('Pre-commit check failed! Please fix detected issues and re-try,\n'
              'or force the commit using "git commit --no-verify".')
        sys.exit(1)
    print('Pre-commit checks passed!')


if __name__ == "__main__":
    main()
